והקוד הבא עובד מצוין?
public function __construct() {
$this->db = db::get_instance();
}
14 תשובות
איזו שגיאה...אני בטוח מסוג FATAL ERROR...
לא ראיתי אף פעם אפשרות של איתחול מאפיין ישירות כאינטנס של מחלקה סטטית...
(אלא אם מדובר בסינגלטון מה שנראה לי שאתה רוצה לממש, שזה מאתחל את המאפיין כאובייקט רק בעת הקריאה לו ולא בעת איתחול המחלקה עצמה)
בד"כ מאפייני מחלקה יכולים להיות מסוג COPMOUND / SCALAR (מה שאומר מערכים, מחרוזות, ספרות - שלמים ועשרוניים)
php לא מבצע כאלה דברים בזמן קומפילציה. אתה לא יכול לזמן פונקציות ככה ישירות, אלא רק במתודה אחרת או בבנאי.
כן, זה סינגלטון.
"שזה מאתחל את המאפיין כאובייקט רק בעת הקריאה לו ולא בעת איתחול המחלקה עצמה." - יש דרך לעשות את זה?
תודה. :)
בניית המחלקות (והמאפיינים של המחלקות) נעשית בזמן קומפילציה.
בזמן קומפילציה אי אפשר להריץ פונקציות, לבצע חישובים או בדיקות לוגיות - אלא רק להכניס ערכים קבועים.
לא יעבוד:
public $x = 3+4;
}
יעבוד:
public $x;
public function __construct() {
$this->x = 3+4;
}
}
זה כי אי אפשר לבצע חישובים (3+4) בזמן קומפילציה.
ובדיוק מאותה סיבה גם אי אפשר לתת לקבועים ערכים מורכבים, כי גם הם נבנים בזמן קומפילציה.
ציטוט מהדוקומנטציה:
http://www.php.net/manual/en/language.oop5.properties.php
אהבתי איך עידן לקח את המילה קומפליציה ושימש אותה במשמעות אחרת לגמרי :-)
@Michael
חח מה זאת אומרת? :)
ז"א שכל המשפט שלך הוא די לא נכון. לקחת את המילה שהשתמש בא cthulhu והבאת לה משמעות אחרת לגמרי.
אם משהו לא נכון אני יותר מאשמח שתתקן אותי. :)
אין פה מה לתקן, המשפט שגוי כולו. לקחת מילה ונתת לה משמעות אחרת.
"בניית המחלקות (והמאפיינים של המחלקות) נעשית בזמן קומפילציה."
"בזמן קומפילציה אי אפשר להריץ פונקציות, לבצע חישובים או בדיקות לוגיות - אלא רק להכניס ערכים קבועים."
פשוט תקרא על תהליך ההידור, ואיך האינטרפרטר של זנד engine עובד.
לא הבנתי את הבעיה.
php לא מחשבת ערכים בזמן בניית המחלקות.
אי אפשר גם להציב משתנים בתור מאפיינים, כי המשתנים מוגדרים בזמן ריצה.
אי אפשר לעשות משהו כזה:
const C = $var;
כי var נוצר בזמן ריצה ומחלקות והקבועים שלהן לא.
ובכלל, קבועים שנוצרים עם const נוצרים ב-compile time (אולי באנגלית תאהב את הביטוי יותר :P ) לעומת קבועים שנוצרים עם define שנוצרים בזמן ריצה.
ומשום שבזמן בניית המחלקות php לא יכולה להריץ פונקציות - קבוע של מחלקה מוגדר עם const ולכן אי אפשר להכניס לו ערכים שתלויים בזמן ריצה (3+4 מחושב בזמן ריצה עד כמה שאני יודע ולכן הוא נותן שגיאה).
אבל גלשתי קצת מנושא אז לא משנה... (:
מה שאתה אומר זה נכון, אבל אתה מערבב מושגים לא נכונים ועושה בהם שימוש לא נכון.
לא הבנתי איפה ערבבתי מושגים לא נכונים. תגיד לי איפה טעיתי כדי שלהבא אני לא אטעה. (: